package My;

import java.util.Stack;

public class MinStack {   //利用一个临时栈实行比较得到栈中最小元素 然后最小的存放在临时栈中

    public Stack<Integer> stack1;
    public Stack<Integer> stack2;

    public MinStack(){
        stack1=new Stack<>();
        stack2=new Stack<>();
    }

    public void push(int val){
        stack1.push(val);
        if(stack2.empty()){
            stack2.push(val);
        }else {
            int x=stack2.peek();
            if(val<=x){  //必须放等号不然出的时候有两个相同的还是会出的
                stack2.push(val);
            }
        }
    }

    public  int getmin(){
        return stack2.peek();
    }

    public  void pop(){  //判断最小元素有没有pop出去，是否要改变临时栈中的最小元素
        int x1=stack1.pop();
        int x2=stack2.peek();
        if(x1==x2){
            stack2.pop();
        }
    }

    public  int top(){  //获取栈一的顶元素
        return stack1.peek();
    }
}
